package com.byx.chatclient.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * TimeFormatUtil
 *
 * @author Superb
 * @date 2021/2/6 19:43
 */
public class TimeFormatUtil {
    /**
     * 给定时间戳与当前时间
     * 超过一周显示格式如2018/03/11 22:43:25
     * 一周内显示“星期几 22：43”
     * 昨天显示“昨天22：43”
     * 前天显示“前天22：43”
     * 今天显示“22：43”
     * @param millis 给定时间戳
     * @return 格式
     */
    public static String format(long millis){
        long nowMillis=System.currentTimeMillis();

        //int类型的数进行除法运算,只能得到整数
        //在下列日期中,只要没过昨天24点,无论相差了1s还是23小时,除法得到的结果都是前一天,
        int day = (int) (nowMillis / 1000 / 60 / 60 / 24 - millis / 1000 / 60 / 60 / 24);
        if(day>7){
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.CHINA);
            return simpleDateFormat.format(millis);
        }else{
            switch (day){
                case 0:
                    SimpleDateFormat sdf1=new SimpleDateFormat("HH:mm:ss", Locale.CHINA);
                    return sdf1.format(millis);

                case 1:
                    SimpleDateFormat sdf2=new SimpleDateFormat("昨天 HH:mm:ss", Locale.CHINA);
                    return sdf2.format(millis);

                case 2:
                    SimpleDateFormat sdf3=new SimpleDateFormat("前天 HH:mm:ss", Locale.CHINA);
                    return sdf3.format(millis);

                default:
                    String[] weekdays={ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                    Date d=new Date(millis);
                    Calendar calendar=Calendar.getInstance();
                    calendar.setTime(d);
                    String dayOfWeek=weekdays[calendar.get(Calendar.DAY_OF_WEEK)-1];
                    SimpleDateFormat simpleDateFormat=new SimpleDateFormat(" HH:mm:ss", Locale.CHINA);
                    return dayOfWeek+simpleDateFormat.format(d);
            }
        }
    }

    /**
     * 判断指定两个时间戳之差是否超过指定秒数范围s
     * @param dMs 指定原时间戳
     * @param millis 指定待比较时间戳
     * @param s 指定秒数
     * @return boolean
     */
    public static boolean timeOver(long dMs,long millis,long s){
        return ( millis-dMs ) >= (s * 1000);
    }
}
